<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="banner-heading flex_ccenter">
            <div class="heading-item">
              <h1 class="title fw700 f-42 c-fff">
                Tải xuống câu chuyện trên Instagram
              </h1>
              <h2 class="sub c-fff f-18 fw400">
                Trình tải xuống câu chuyện Instagram tốt nhất miễn phí
              </h2>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                    type="text"
                    class="input f-18"
                    v-model="input"
                    @input="handleInput"
                    @paste="handleInput"
                    placeholder="Paste URL Instagram"
                    list="fruits"
                    name="fruit"
                  />
                  <datalist id="fruits">
                    <option value="Apple"></option>
                    <option value="Banana"></option>
                    <option value="Cherry"></option>
                  </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>Đang lấy dữ liệu, vui lòng đợi vài giây!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Trang web không thể xử lý liên kết của bạn vì nó là riêng tư
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Dữ liệu bạn nhập không phải là một liên kết, vui lòng nhập một
              liên kết hợp lệ cho ví dụ:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                Tải xuống bằng ứng dụng Insta Downloader
              </h3>
              <p class="f-16 c-ccc">
                Ứng dụng của chúng tôi cung cấp giải pháp tải xuống nhanh chóng
                và đơn giản Video Instagram, cung cấp video chất lượng HD mà
                không cần hình mờ.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Tải xuống câu chuyện trên Instagram với Savinginsta
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta.Com là trình tải xuống câu chuyện Instagram hàng đầu,
              được biết đến vì tính dễ sử dụng và khả năng tải xuống Instagram
              chất lượng cao truyện với tốc độ nhanh nhất. Tải Instagram Stories
              về máy của bạn điện thoại, PC hoặc máy tính bảng ở chất lượng cao
              nhất bằng Instagram của chúng tôi trình tải xuống video trực tiếp
              từ trình duyệt của bạn. Không có phần mềm cần phải cài đặt và nó
              hỗ trợ cả Android và iOS.
            </p>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Tại sao nên sử dụng Savinginsta để tải xuống câu chuyện trên
              Instagram?
            </h3>
            <p class="f-16 c-ccc">
              Câu chuyện trên Instagram chứa đầy những bức ảnh và video quyến rũ
              một phần quan trọng trong biểu hiện kỹ thuật số của chúng tôi
              nhưng chỉ hiển thị trong 24 giờ. Nếu bạn thích xem Instagram
              Stories và muốn tải chúng xuống, Savinginsta sẵn sàng trợ giúp.
              Đơn giản chỉ cần nhập URL Instagram Story vào Savinginsta và tải
              xuống tốt nhất Câu chuyện trên Instagram miễn phí.
            </p>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Làm cách nào để tải xuống video Instagram Story?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Bước01:</span>
                  <span class="f-16 c-000">
                    Nhập tên người dùng Instagram của câu chuyện bạn muốn tải
                    xuống Savinginsta.App.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Bước02:</span>
                <span class="f-16 c-000">
                  Chọn Câu chuyện bạn muốn tải xuống.</span
                >
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Bước03:</span>
                <span class="f-16 c-000"
                  >Nhấp vào 'Tải xuống' để lưu câu chuyện video trên Instagram
                  vào máy của bạn thiết bị.</span
                >
              </div>
            </div>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Làm cách nào để tải xuống câu chuyện Insta về điện thoại của bạn?
            </h3>
            <div class="attributes-list">
              <div class="features-title">
                Tải về là siêu dễ dàng. Dưới đây là hướng dẫn chi tiết:
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Mở Instagram trong trình duyệt như Chrome, Firefox hoặc Ứng
                  dụng Instagram.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">Chọn một câu chuyện mà bạn thấy hấp dẫn.</div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Bấm vào video bạn muốn tải xuống.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Sao chép URL câu chuyện từ thanh địa chỉ.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Dán tên người dùng vào ô địa chỉ trên Savinginsta.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Nhấn 'Tải xuống' để tải xuống câu chuyện Instagram trực tuyến.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Ảnh hoặc video câu chuyện IG đã tải xuống hiện có trong thư mục của bạn.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Làm cách nào để tải xuống trực tuyến các câu chuyện và nội dung nổi bật trên Instagram?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="f-16 c-000"
                    >Nhận liên kết từ Instagram Stories hoặc sao chép
                     tên người dùng của tài khoản Instagram bạn muốn tải xuống
                     từ.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Đi đến Savinginsta - Insta Story Downloader và dán
                   liên kết câu chuyện vào thanh công cụ.
                </span>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Chọn Story hiển thị trên màn hình, chọn truyện
                   bạn muốn tải xuống và nhấn 'Tải xuống'.</span
                >
              </div>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Điều gì khiến Savinginsta.Com trở thành câu chuyện hay nhất trên Instagram (IG) Tải xuống
               Dụng cụ?
            </h3>
            <ul class="f-16 c-ccc">
              <li>Công cụ thân thiện với người dùng và nhanh nhất.</li>
              <li>Cập nhật liên tục để cung cấp dịch vụ tốt nhất.</li>
              <li>
                Hoàn toàn miễn phí! Chúng tôi hỗ trợ sự phát triển của mình thông qua việc tối thiểu
                 quảng cáo.
              </li>
            </ul>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">Công cụ</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/vn/instagram-story-download"
                      >Trình tải xuống câu chuyện trên Instagram</nuxt-link
                    >
                  </li>
                  <li>
                    <nuxt-link to="/vn/instagram-reels-video-download"
                      >Trình tải xuống Instagram Reels</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >Trình tải xuống Tiktok</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Ủng hộ</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> Liên hệ </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Hợp pháp</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      Điều khoản dịch vụ
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> Chính sách bảo mật</nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >Chúng tôi không liên kết với Instagram hoặc Meta</b
            >
            <div class="c-ccc f-16">
              © {{new Date().getFullYear()}} Insta Downloader All rights reserved.
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>
    
<script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";
export default {
  components: { pageHeader, SuccessContent },
  head: {
    htmlAttrs: {
      lang: "vi",
    },
    bodyAttrs: {
      "data-lang": "vi",
    },
    title: "Trình tải xuống câu chuyện Instagram miễn phí tốt nhất",
    meta: [
      { property: "og:locale", content: "vi" },
      //Page Information
      {
        name: "description",
        content:
          "Tải xuống trực tuyến các câu chuyện trên Instagram một cách dễ dàng với Savinginsta Instagram Downloader miễn phí. Lưu câu chuyện Instagram chất lượng cao trực tiếp vào máy tính hoặc điện thoại của bạn mà không có bất kỳ quảng cáo nào. Không có hình mờ",
      },

      //Schema.org Microdata
      {
        itemprop: "name",
        content: "Trình tải xuống câu chuyện Instagram miễn phí tốt nhất",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content: "Trình tải xuống câu chuyện Instagram miễn phí tốt nhất",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/vn/instagram-story-download" },

      {
        property: "og:description",
        content:
          "Tải xuống trực tuyến các câu chuyện trên Instagram một cách dễ dàng với Savinginsta Instagram Downloader miễn phí. Lưu câu chuyện Instagram chất lượng cao trực tiếp vào máy tính hoặc điện thoại của bạn mà không có bất kỳ quảng cáo nào. Không có hình mờ",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/vn/instagram-story-download" },
      {
        name: "twitter:title",
        content: "Trình tải xuống câu chuyện Instagram miễn phí tốt nhất",
      },
      {
        name: "twitter:description",
        content:
          "Tải xuống trực tuyến các câu chuyện trên Instagram một cách dễ dàng với Savinginsta Instagram Downloader miễn phí. Lưu câu chuyện Instagram chất lượng cao trực tiếp vào máy tính hoặc điện thoại của bạn mà không có bất kỳ quảng cáo nào. Không có hình mờ",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el/instagram-story-download",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
    ],
    script: [
      {
        json: {
          "@context": "http://schema.org",
          "@graph": [
            {
              "@type": "WebSite",
              name: "Savinginsta",
              alternateName: "Instagram downloader",
              url: "https://savinginsta.com",
            },
            {
              "@type": "WebPage",
              name: "Trình tải xuống câu chuyện Instagram miễn phí tốt nhất - Savinginsta", //title
              inLanguage: "vn", //语种
              description:
                "Tải xuống trực tuyến các câu chuyện trên Instagram một cách dễ dàng với Savinginsta Instagram Downloader miễn phí. Lưu câu chuyện Instagram chất lượng cao trực tiếp vào máy tính hoặc điện thoại của bạn mà không có bất kỳ quảng cáo nào. Không có hình mờ.", //元描述
              image: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg", //绝对路径
              url: "https://savinginsta.com/vn/instagram-story-download", //当前url
            },
          ],
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `Trình tải xuống câu chuyện trên Instagram là gì?`,
          content: `Đây là công cụ miễn phí để tải xuống Instagram Stories một cách dễ dàng mà không cần đăng ký.`,
        },
        {
          title: `Cách tải xuống video Instagram Story?`,
          content: `Thực hiện theo hướng dẫn đơn giản ở trên để tải nhanh Instagram Stories tại Savinginsta.`,
        },
        {
          title: `Làm cách nào tôi có thể tải xuống Điểm nổi bật từ Instagram?`,
          content: `Để tải xuống nội dung nổi bật trên Instagram, tài khoản phải ở chế độ công khai. Nhập tên người dùng trên Savinginsta.app và nhấp vào 'Tải xuống'.`,
        },
        {
          title: `Nếu tôi muốn xem các câu chuyện trên IG một cách ẩn danh thì sao?`,
          content: `Chúng tôi có một giải pháp hoàn hảo: trình xem Instagram Story ẩn danh của chúng tôi Instagram Story Viewer.`,
        },
        {
          title: `Bạn có cần đăng nhập bằng tài khoản Instagram của mình không?`,
          content: `Không cần đăng nhập. Savinginsta không yêu cầu bất kỳ thông tin cá nhân nào, đảm bảo tải xuống an toàn và ẩn danh.`,
        },
        {
          title: `Tôi có thể lưu video trực tiếp trên Instagram không?`,
          content: `Có, nhưng bạn phải đợi cho đến khi video kết thúc.`,
        },
        {
          title: `Trang web có hỗ trợ tải xuống từ Insta cho máy tính không?`,
          content: `Hoàn toàn có thể, bạn có thể tải xuống video, ảnh, câu chuyện, v.v. từ PC. Xem thêm: Tải xuống từ Insta trên PC.`,
        },
        {
          title: `Bạn có thể tải xuống câu chuyện Instagram cho Android không?`,
          content: `Có, sao chép liên kết bài đăng, dán vào hộp trang web của chúng tôi và lưu lại. Để biết thêm thông tin: Tải xuống từ Insta trên Android.`,
        },
        {
          title: `Cách tải xuống video và ảnh Story Instagram trên iPhone?`,
          content: `Nó cũng dễ dàng như trên Android. Hãy xem hướng dẫn Tải story Instagram cho iOS.`,
        },
        {
          title: `Tôi có thể tìm video câu chuyện đã lưu trên máy tính ở đâu?`,
          content: `Kiểm tra lịch sử tải xuống của trình duyệt bằng Ctrl+J dành cho Windows và Shift+Command+J dành cho Mac.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "story",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "story",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "story",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "story",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "story",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "story",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },
    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "story",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "story",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
  },
};
</script>
<style lang="scss" scoped>
@import "@/static/style/story.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
    